<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta content="Cask Data, Inc." name="author" />
<meta content="Copyright © 2014-2016 Cask Data, Inc." name="copyright" />


    <meta name="git_release" content="6.1.1">
    <meta name="git_hash" content="05fbac36f9f7aadeb44f5728cea35136dbc243e5">
    <meta name="git_timestamp" content="2020-02-09 08:22:47 +0800">
    <title>Preferences and Runtime Arguments</title>

    <link rel="stylesheet" href="../_static/cdap-bootstrap.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <link rel="stylesheet" href="../_static/bootstrap-3.3.6/css/bootstrap.min.css" type="text/css" />
    <link rel="stylesheet" href="../_static/bootstrap-3.3.6/css/bootstrap-theme.min.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/bootstrap-sphinx.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/cdap-dynamicscrollspy-4.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/jquery.mCustomScrollbar.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/cdap-jquery.mCustomScrollbar.css" type="text/css" />
    <link rel="stylesheet" href="../_static/css/abixTreeList-2.css" type="text/css" />
    <link rel="stylesheet" href="../_static/cdap-bootstrap.css" type="text/css" />

    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '',
        VERSION:     '6.1.1',
        COLLAPSE_INDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  false
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/language_data.js"></script>

    <link rel="shortcut icon" href="../_static/favicon.ico"/>
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="top" title="Cask Data Application Platform 6.1.1 Documentation" href="../index.html" />
    <link rel="up" title="Operations" href="index.html" />
    <link rel="next" title="Scaling Instances" href="scaling-instances.html" />
    <link rel="prev" title="Dashboard and Reports" href="operations-dashboard.html" />
    <!-- block extrahead -->
    <meta charset='utf-8'>
    <meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
    <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
    <meta name="apple-mobile-web-app-capable" content="yes">
    <!-- block extrahead end -->

</head>
<body role="document">

<!-- block navbar -->
<div id="navbar" class="navbar navbar-inverse navbar-default navbar-fixed-top">
    <div class="container-fluid">
      <div class="row">
        <div class="navbar-header">
          <!-- .btn-navbar is used as the toggle for collapsed navbar content -->
          <a class="navbar-brand" href="../table-of-contents/../../index.html">
            <span><img alt="CDAP logo" src="../_static/cdap_logo.svg"/></span>
          </a>

          <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>

          <div class="pull-right">
            <div class="dropdown version-dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown"
                role="button" aria-haspopup="true" aria-expanded="false">
                v 6.1.1 <span class="caret"></span>
              </a>
              <ul class="dropdown-menu">
                <li><a href="//docs.cdap.io/cdap/5.1.2/en/index.html">v 5.1.2</a></li>
                <li><a href="//docs.cdap.io/cdap/4.3.4/en/index.html">v 4.3.4</a></li>
              </ul>
            </div>
          </div>
          <form class="navbar-form navbar-right navbar-search" action="../search.html" method="get">
            <div class="form-group">
              <div class="navbar-search-image material-icons"></div>
              <input type="text" name="q" class="form-control" placeholder="  Search" />
            </div>
            <input type="hidden" name="check_keywords" value="yes" />
            <input type="hidden" name="area" value="default" />
          </form>

          <div class="collapse navbar-collapse nav-collapse navbar-right navbar-navigation">
            <ul class="nav navbar-nav"><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../index.html">简介</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link current" href="../table-of-contents/../../guides.html">手册</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../reference-manual/index.html">参考</a></li><li class="docsite-nav-tab-container"><a class="docsite-nav-tab-link " href="../table-of-contents/../../faqs/index.html">帮助</a></li>
            </ul>
          </div>

        </div>
      </div>
    </div>
  </div><!-- block navbar end -->
<!-- block main content -->
<div class="main-container container">
  <div class="row"><div class="col-md-2">
      <div id="sidebar" class="bs-sidenav scrollable-y-outside" role="complementary">
<!-- theme_manual: admin-manual -->
<!-- theme_manual_highlight: guides -->
<!-- sidebar_title_link: ../table-of-contents/../../guides.html -->

  <div role="note" aria-label="manuals links"><h3><a href="../table-of-contents/../../guides.html">Guides</a></h3>

    <ul class="this-page-menu">
      <li class="toctree-l1"><a href="../table-of-contents/../../user-guide/index.html" rel="nofollow">用户手册</a>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../developer-manual/index.html" rel="nofollow">开发手册</a>
      </li>
      <li class="toctree-l1"><b><a href="../table-of-contents/../../admin-manual/index.html" rel="nofollow">管理手册</a></b>
      <nav class="pagenav">
      <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../index.html"> Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../cdap-components.html"> CDAP Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="../deployment-architectures.html"> Deployment Architectures</a></li>
<li class="toctree-l1"><a class="reference internal" href="../hadoop-compatibility.html"> Hadoop Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../cdap-hadoop-compatibility.html"> CDAP and Hadoop Compatibility</a></li>
<li class="toctree-l1"><a class="reference internal" href="../system-requirements.html"> System Requirements</a></li>
<li class="toctree-l1"><a class="reference internal" href="../installation/index.html"> Installation</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../installation/cloudera.html">Cloudera Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/emr.html">Amazon EMR</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/ambari.html">Apache Ambari</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/mapr.html">MapR</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/azure-hdinsight.html">Microsoft Azure HDInsight</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/packages.html">Packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="../installation/replication.html">Replication</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../incompatibilities.html"> Incompatibilities</a></li>
<li class="toctree-l1"><a class="reference internal" href="../upgrading/index.html"> Upgrading</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../upgrading/cloudera.html">Cloudera Manager</a></li>
<li class="toctree-l2"><a class="reference internal" href="../upgrading/ambari.html">Apache Ambari</a></li>
<li class="toctree-l2"><a class="reference internal" href="../upgrading/mapr.html">MapR</a></li>
<li class="toctree-l2"><a class="reference internal" href="../upgrading/packages.html">Packages</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../security/index.html"> Security</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../security/perimeter-security.html">Perimeter Security</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/authorization.html">Authorization</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/impersonation.html">Impersonation</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/system-services.html">Enabling SSL for System Services</a></li>
<li class="toctree-l2"><a class="reference internal" href="../security/secure-storage.html">Secure Storage</a></li>
</ul>
</li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html"> Operations</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="logging.html"> Logging and Monitoring</a></li>
<li class="toctree-l2"><a class="reference internal" href="metrics.html"> Metrics</a></li>
<li class="toctree-l2"><a class="reference internal" href="operations-dashboard.html"> Dashboard and Reports</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#"> Preferences and Runtime Arguments</a></li>
<li class="toctree-l2"><a class="reference internal" href="scaling-instances.html"> Scaling Instances</a></li>
<li class="toctree-l2"><a class="reference internal" href="resource-guarantees.html"> Resource Guarantees in YARN</a></li>
<li class="toctree-l2"><a class="reference internal" href="tx-maintenance.html"> Transaction Service Maintenance</a></li>
<li class="toctree-l2"><a class="reference internal" href="cdap-ui.html"> CDAP UI</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../appendices/index.html"> Appendices</a><ul>
<li class="toctree-l2"><a class="reference internal" href="../appendices/cdap-site.html"> Appendix: cdap-site.xml</a></li>
<li class="toctree-l2"><a class="reference internal" href="../appendices/cdap-security.html"> Appendix: cdap-security.xml</a></li>
<li class="toctree-l2"><a class="reference internal" href="../appendices/minimal-cdap-site.html"> Appendix: Minimal cdap-site.xml</a></li>
<li class="toctree-l2"><a class="reference internal" href="../appendices/hbase-ddl-executor.html"> Appendix: HBaseDDLExecutor</a></li>
</ul>
</li>
</ul>
</nav>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../integrations/index.html" rel="nofollow">集成手册</a>
      </li>
      <li class="toctree-l1"><a href="../table-of-contents/../../examples-manual/index.html" rel="nofollow">最佳实践</a>
      </li>
    </ul>
  </div></div>
    </div><div class="col-md-8 content" id="main-content">
    
  <div class="section" id="preferences-and-runtime-arguments">
<span id="preferences"></span><h1>Preferences and Runtime Arguments<a class="headerlink" href="#preferences-and-runtime-arguments" title="Permalink to this headline">🔗</a></h1>
<p>Preferences provide the ability to save configuration information at various levels of the system, including the
CDAP instance, namespace, application, and program levels. A configuration is represented by a map of string-string
pairs. Preferences can be retrieved, saved, and deleted through a RESTful API and through the Command Line Interface.
When programs are started, all the preferences at the different levels are collapsed into a single map. Preferences
are persisted across a restart of either programs or CDAP itself.</p>
<div class="section" id="order-of-preferences">
<span id="preferences-order-of"></span><h2>Order of Preferences<a class="headerlink" href="#order-of-preferences" title="Permalink to this headline">🔗</a></h2>
<p>The overriding order of preferences is (from lowest to highest precedence):</p>
<blockquote>
<div>CDAP Instance &lt; Namespace &lt; Application &lt; Program &lt; Runtime Arguments <em>(passed in during start of the program)</em></div></blockquote>
<p><strong>Example:</strong> A configuration preference <code class="docutils literal notranslate"><span class="pre">SAMPLE_KEY</span></code> is set to 20 at the namespace level and is set to 10 at the
program level. When the program is started, the value set at the program level overrides the value set at
the namespace level and thus the value for the preference <code class="docutils literal notranslate"><span class="pre">SAMPLE_KEY</span></code> will be 10.</p>
<p>Programs such as MapReduce programs, services, workflows and workers will receive the resolved preferences
and can be accessed through the <code class="docutils literal notranslate"><span class="pre">getRuntimeArguments</span></code> method of the context:</p>
<ul class="simple">
<li>For services, and workers: preferences are available to the <code class="docutils literal notranslate"><span class="pre">initialize</span></code> method in the context.</li>
<li>For MapReduce and Spark: preferences are available to the <code class="docutils literal notranslate"><span class="pre">initialize</span></code> and <code class="docutils literal notranslate"><span class="pre">destroy</span></code> methods in the context.
The <code class="docutils literal notranslate"><span class="pre">initialize</span></code> method can pass them to the mappers and reducers through the job configuration.</li>
<li>When a workflow receives preferences, it passes them to each MapReduce in the workflow.</li>
</ul>
</div>
<div class="section" id="preferences-and-runtime-arguments-in-the-cdap-ui">
<h2>Preferences and Runtime Arguments in the CDAP UI<a class="headerlink" href="#preferences-and-runtime-arguments-in-the-cdap-ui" title="Permalink to this headline">🔗</a></h2>
<p>In the <a class="reference internal" href="cdap-ui.html#cdap-ui"><span class="std std-ref">CDAP UI</span></a>, preferences can be set at the different levels (as
described above), with runtime arguments being available at the lowest level of individual
elements.</p>
<p>Preferences are retained, and are persisted across different runs and restarts of
applications and CDAP. Runtime arguments (available under the <em>Arguments</em> buttons in the
CDAP UI) are one-time only, for a particular invocation, and are not persisted. Use the
<em>Preferences</em> button with the same key-value pairs for arguments you would like persisted.</p>
</div>
<div class="section" id="preferences-example">
<h2>Preferences Example<a class="headerlink" href="#preferences-example" title="Permalink to this headline">🔗</a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">initialize()</span></code> method in this example accepts a configuration key <code class="docutils literal notranslate"><span class="pre">disable.public</span></code> for the
<code class="docutils literal notranslate"><span class="pre">TweetCollector</span></code> flowlet. For example, we can disable using the Public Twitter Source
or provide Twitter API credentials:</p>
<div class="highlight-java notranslate"><div class="highlight"><pre><span></span><span class="kd">public</span> <span class="kd">class</span> <span class="nc">TweetCollector</span> <span class="kd">extends</span> <span class="n">AbstractFlowlet</span> <span class="p">{</span>
  <span class="kd">private</span> <span class="kd">static</span> <span class="kd">final</span> <span class="n">Logger</span> <span class="n">LOG</span> <span class="o">=</span> <span class="n">LoggerFactory</span><span class="p">.</span><span class="na">getLogger</span><span class="p">(</span><span class="n">TweetCollector</span><span class="p">.</span><span class="na">class</span><span class="p">);</span>

  <span class="kd">private</span> <span class="n">OutputEmitter</span><span class="o">&lt;</span><span class="n">Tweet</span><span class="o">&gt;</span> <span class="n">output</span><span class="p">;</span>

  <span class="kd">private</span> <span class="n">CollectingThread</span> <span class="n">collector</span><span class="p">;</span>
  <span class="kd">private</span> <span class="n">BlockingQueue</span><span class="o">&lt;</span><span class="n">Tweet</span><span class="o">&gt;</span> <span class="n">queue</span><span class="p">;</span>

  <span class="kd">private</span> <span class="n">Metrics</span> <span class="n">metrics</span><span class="p">;</span>

  <span class="kd">private</span> <span class="n">TwitterStream</span> <span class="n">twitterStream</span><span class="p">;</span>

  <span class="nd">@Override</span>
  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">FlowletContext</span> <span class="n">context</span><span class="p">)</span> <span class="kd">throws</span> <span class="n">Exception</span> <span class="p">{</span>
    <span class="kd">super</span><span class="p">.</span><span class="na">initialize</span><span class="p">(</span><span class="n">context</span><span class="p">);</span>
    <span class="n">Map</span><span class="o">&lt;</span><span class="n">String</span><span class="p">,</span> <span class="n">String</span><span class="o">&gt;</span> <span class="n">args</span> <span class="o">=</span> <span class="n">context</span><span class="p">.</span><span class="na">getRuntimeArguments</span><span class="p">();</span>

    <span class="k">if</span> <span class="p">(</span><span class="n">args</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;disable.public&quot;</span><span class="p">))</span> <span class="p">{</span>
      <span class="n">LOG</span><span class="p">.</span><span class="na">info</span><span class="p">(</span><span class="s">&quot;Public Twitter source turned off&quot;</span><span class="p">);</span>
      <span class="k">return</span><span class="p">;</span>
    <span class="p">}</span>

    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="n">args</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;oauth.consumerKey&quot;</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">args</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;oauth.consumerSecret&quot;</span><span class="p">)</span>
     <span class="o">||</span> <span class="o">!</span><span class="n">args</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;oauth.accessToken&quot;</span><span class="p">)</span> <span class="o">||</span> <span class="o">!</span><span class="n">args</span><span class="p">.</span><span class="na">containsKey</span><span class="p">(</span><span class="s">&quot;oauth.accessTokenSecret&quot;</span><span class="p">))</span> <span class="p">{</span>
      <span class="kd">final</span> <span class="n">String</span> <span class="n">CREDENTIALS_MISSING</span> <span class="o">=</span> <span class="s">&quot;Twitter API credentials not provided in runtime arguments.&quot;</span><span class="p">;</span>
      <span class="n">LOG</span><span class="p">.</span><span class="na">error</span><span class="p">(</span><span class="n">CREDENTIALS_MISSING</span><span class="p">);</span>
<span class="c1">//      throw new IllegalArgumentException(CREDENTIALS_MISSING);</span>
    <span class="p">}</span>

    <span class="n">queue</span> <span class="o">=</span> <span class="k">new</span> <span class="n">LinkedBlockingQueue</span><span class="o">&lt;</span><span class="n">Tweet</span><span class="o">&gt;</span><span class="p">(</span><span class="mi">10000</span><span class="p">);</span>
    <span class="n">collector</span> <span class="o">=</span> <span class="k">new</span> <span class="n">CollectingThread</span><span class="p">();</span>
    <span class="n">collector</span><span class="p">.</span><span class="na">start</span><span class="p">();</span>
  <span class="p">}</span>
</pre></div>
</div>
</div>
<div class="section" id="system-populated-runtime-arguments">
<h2>System-populated Runtime Arguments<a class="headerlink" href="#system-populated-runtime-arguments" title="Permalink to this headline">🔗</a></h2>
<p>On each program run, CDAP populates the runtime arguments with pre-defined values (currently, one):</p>
<ul class="simple">
<li><code class="docutils literal notranslate"><span class="pre">logical.start.time</span></code>: the start time of the run as a timestamp in milliseconds.
If the run was started by a schedule, this will be equal to the trigger time for the schedule.
For example, if the schedule was set to run at midnight on Jan 1, 2016 UTC, the logical start time would be <code class="docutils literal notranslate"><span class="pre">1451606400000</span></code>.</li>
</ul>
<p>If an argument is passed in to start a program run, it will override the system-populated value.</p>
</div>
<div class="section" id="scoped-runtime-arguments-for-workflow">
<h2>Scoped Runtime Arguments for Workflow<a class="headerlink" href="#scoped-runtime-arguments-for-workflow" title="Permalink to this headline">🔗</a></h2>
<p>When a workflow is configured, you may want to pass specific runtime arguments to the different programs
and datasets used inside the workflow. To achieve this, you can prefix the runtime arguments with a <code class="docutils literal notranslate"><span class="pre">&lt;scope&gt;</span></code>.
Currently supported scopes are <code class="docutils literal notranslate"><span class="pre">dataset</span></code>, <code class="docutils literal notranslate"><span class="pre">mapreduce</span></code>, and <code class="docutils literal notranslate"><span class="pre">spark</span></code>.</p>
<p><strong>Example:</strong> To set a runtime argument of <code class="docutils literal notranslate"><span class="pre">read.timeout=30</span></code> for the MapReduce program <code class="docutils literal notranslate"><span class="pre">oneMapReduce</span></code> in a workflow,
the argument can be provided with a scope of <code class="docutils literal notranslate"><span class="pre">mapreduce.oneMapReduce.read.timeout=30</span></code>. In this case, <code class="docutils literal notranslate"><span class="pre">oneMapReduce</span></code>
and the datasets used in <code class="docutils literal notranslate"><span class="pre">oneMapReduce</span></code> will receive two arguments: one with a scope of
<code class="docutils literal notranslate"><span class="pre">mapreduce.oneMapReduce.read.timeout=30</span></code>, and another with the scope extracted as <code class="docutils literal notranslate"><span class="pre">read.timeout=30</span></code>.
Programs other than <code class="docutils literal notranslate"><span class="pre">oneMapReduce</span></code> and datasets used in them will receive only the single argument
<code class="docutils literal notranslate"><span class="pre">mapreduce.oneMapReduce.read.timeout=30</span></code>.</p>
<p>An argument can also be prefixed with <code class="docutils literal notranslate"><span class="pre">&lt;scope&gt;.*</span></code> to apply it to all programs or datasets in the workflow as
represented by the scope.</p>
<p><strong>Example:</strong> If the runtime argument is specified as <code class="docutils literal notranslate"><span class="pre">mapreduce.*.read.timeout=30</span></code>, all MapReduce programs and
datasets used in them will receive two arguments: one with the scope <code class="docutils literal notranslate"><span class="pre">mapreduce.*.read.timeout=30</span></code> and another
with the scope extracted as <code class="docutils literal notranslate"><span class="pre">read.timeout=30</span></code>. Programs other than the MapReduce and the datasets used by them
will receive only the single argument <code class="docutils literal notranslate"><span class="pre">mapreduce.*.read.timeout=30</span></code>.</p>
<p>Since the datasets can be used by programs running inside a workflow, a scope for them can be nested inside a
corresponding program scope.</p>
<p><strong>Example:</strong> Consider the dataset <code class="docutils literal notranslate"><span class="pre">myTable</span></code> used by multiple programs in a workflow. The runtime argument
<code class="docutils literal notranslate"><span class="pre">cache.seconds=30</span></code> for <code class="docutils literal notranslate"><span class="pre">myTable</span></code> can be provided as <code class="docutils literal notranslate"><span class="pre">dataset.myTable.cache.seconds=30</span></code>. In this case,
the argument will be set for all programs that use <code class="docutils literal notranslate"><span class="pre">myTable</span></code>. In order to set the argument only for the MapReduce
program <code class="docutils literal notranslate"><span class="pre">myMR</span></code>, the dataset argument can be nested inside the program scope as
<code class="docutils literal notranslate"><span class="pre">mapreduce.myMR.dataset.myTable.cache.seconds=30</span></code>.</p>
</div>
</div>

</div>
    <div class="col-md-2">
      <div id="right-sidebar" class="bs-sidenav scrollable-y" role="complementary">
        <div id="localtoc-scrollspy">
        </div>
      </div>
    </div></div>
</div>
<!-- block main content end -->
<!-- block footer -->
<footer class="footer">
      <div class="container">
        <div class="row">
          <div class="col-md-2 footer-left"><a title="Dashboard and Reports" href="operations-dashboard.html" />Previous</a></div>
          <div class="col-md-8 footer-center"><a class="footer-tab-link" href="../table-of-contents/../../reference-manual/licenses/index.html">Copyright</a> &copy; 2014-2020 Cask Data, Inc.&bull; <a class="footer-tab-link" href="//docs.cask.co/cdap/6.1.1/cdap-docs-6.1.1-web.zip" rel="nofollow">Download</a> an archive or
<a class="footer-tab-link" href="//docs.cask.co/cdap">switch the version</a> of the documentation
          </div>
          <div class="col-md-2 footer-right"><a title="Scaling Instances" href="scaling-instances.html" />Next</a></div>
        </div>
      </div>
    </footer>
<!-- block footer end -->
<script type="text/javascript" src="../_static/bootstrap-3.3.6/js/bootstrap.min.js"></script><script type="text/javascript" src="../_static/js/bootstrap-sphinx.js"></script><script type="text/javascript" src="../_static/js/abixTreeList-2.js"></script><script type="text/javascript" src="../_static/js/cdap-dynamicscrollspy-4.js"></script><script type="text/javascript" src="../_static/js/cdap-version-menu.js"></script><script type="text/javascript" src="../_static/js/copy-to-clipboard.js"></script><script type="text/javascript" src="../_static/js/jquery.mousewheel.min.js"></script><script type="text/javascript" src="../_static/js/jquery.mCustomScrollbar.js"></script><script type="text/javascript" src="../_static/js/js.cookie.js"></script><script type="text/javascript" src="../_static/js/tabbed-parsed-literal-0.2.js"></script><script type="text/javascript" src="../_static/js/cdap-onload-javascript.js"></script><script type="text/javascript" src="../_static/js/cdap-version-menu.js"></script>
    <script src="https://cdap.gitee.io/docs/cdap/json-versions.js"/></script>
  </body>
</html>